package com.qualiti.javaweb.mb;

import java.io.Serializable;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import com.qualiti.javaweb.modelo.Livro;

@ManagedBean
@SessionScoped
public class CarrinhoMB implements Serializable {
	
	private Map<Livro, Integer> livros = new HashMap<>();

	public Map<Livro, Integer> getLivros() {
		return livros;
	}

	public void setLivros(Map<Livro, Integer> livros) {
		this.livros = livros;
	}

	public void adicionarLivro(Livro livro) {
		if (livros.containsKey(livro)) {
			adicionarQuantidade(livro);
		} else {
			livros.put(livro, 1);
		}
	}
	
	public List<Entry<Livro, Integer>> getEntryLivros() {
		return new ArrayList(livros.entrySet());
	}
	
	public void adicionarQuantidade(Livro livro) {
		livros.put(livro, livros.get(livro) + 1);
	}
	
	public void diminuirQuantidade(Livro livro) {
		if (livros.get(livro) == 1) {
			livros.remove(livro);
		} else {
			livros.put(livro, livros.get(livro) - 1);
		}
	}
	
	public String getTotal() {
		BigDecimal total = new BigDecimal(0);
		for (Entry<Livro, Integer> entry : livros.entrySet()) {
			total = total.add(entry.getKey().getPreco().multiply(BigDecimal.valueOf(entry.getValue())));
		}
		
		Locale locale = FacesContext.getCurrentInstance().getExternalContext().getRequestLocale();
		NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
		return numberFormat.format(total.longValue());
	}
}